//
// Description: 6. Z 字形变换
// Created by Loading on 2025/3/21.
//

#include <bits/stdc++.h>

using namespace std;

string convert(string s, int numRows) {
    int n = s.size();
    if (numRows == 1 || n <= numRows) {
        return s;
    }
    string res;
    int t = numRows * 2 - 2; // 变换周期
    for (int i = 0; i < numRows; ++i) { // 遍历行数，按行填充字符串
        for (int j = i; j < n; j += t) { // 枚举每个周期的起始下标
            res += s[j]; // 填充每个周期内的第一个字符
            if (i > 0 && i < numRows - 1 && j + t - 2 * i < n) { // 存在第二个字符（第0行和第numRows行不存在）
                res += s[j + t - 2 * i]; // 填充每个周期内的第二个字符
            }
        }
    }

    return res;
}
int main() {
    string s = "PAYPALISHIRING";
    int numRows = 3;
    auto res = convert(s, numRows);

    cout << res << endl;

    return 0;
}
